A print server typically schedules jobs to be printed to a set of physical or logical printers. Since some print jobs can typically be relatively large and can consume a large amount of resources, the perceived and actual performance of a print server can be dramatically impacted when the system allows a job to be printed.
For example, if a sufficient number of jobs are scheduled to be rendered or printed, the physical memory of the computer can be exhausted which can lead to what is known as “thrashing”. Thrashing is a condition that occurs when virtual memory is repeatedly written to and from the hard disk. This, in turn, can lead to a situation in which less progress is made, with regard to processing the print jobs, than if the jobs which resulted in the system thrashing were not scheduled. In this situation, a scheduling decision can affect the actual performance of the system. Similarly, if enough data is read independently from multiple files on a hard disk, performance can actually be degraded since this induces extra head movement on the disk.
In another example, consider that a large job and a set of smaller jobs need to be printed. In this situation, more users will receive their jobs more quickly if the large job is printed after the smaller jobs. In this situation, the perceived performance, rather than actual performance, is degraded since the throughput of the server may be no lower in either case.
Since print jobs can tend to vary in size and/or desired priority it would be desirable to provide a means that allows print server administrators to control the priority of the jobs in the system, and to also schedule jobs at certain times. In addition, it would be desirable to be able to provide users with the ability to change the priority of their jobs, if they are approved by an administrator for doing so.
Accordingly, this invention arose out of concerns associated with providing improved print job queuing and scheduling systems and methods.